package alejandro.celulares
import scala.collection.mutable.ListBuffer

class ClienteEstandar(nombreP: String, numeroP: Long, planP: PlanDePago) extends ClienteEstructura(nombreP, numeroP, planP){
    
	  /* ##################################################################
	  
	  La clase contiene todo el protocolo de un cliente estandar
	  solo permite organizar el codigo para visualizar facilmente 
	  el protocolo relaciona a mixins en la clase cliente
	  
	  ################################################################## */	
  
    def this(nombreP: String, numeroP: Long) = this(nombreP, numeroP, new PlanDePago())
  
    def minutosEnMes(mes: Integer, anio: Integer): BigDecimal = {
	    getLlamadasMesAnio(mes, anio).map(com => com.cantMinutos()).foldLeft(0)((b, a) => (b + a))
	}
	
	def montoSinPromosFacturaEnMes(mes: Integer, anio: Integer): BigDecimal = {
	    var listadoComunicaciones: ListBuffer[Comunicacion] = getComunicacionesMesAnio(mes, anio)	    
	    var listadoPrecios: ListBuffer[BigDecimal] = listadoComunicaciones.map{com => com.precioComunicacion()}
	    var cero: BigDecimal = 0.0
	    listadoPrecios.foldLeft(cero)((b, a) => (b + a))
	    
	}
	
	def cantidadComunicacionesLargasEnMes(mes: Integer, anio: Integer): Int = {
	    var listadoComunicaciones: ListBuffer[Comunicacion] = getComunicacionesMesAnio(mes, anio)
	    listadoComunicaciones.filter(com => com.esComunicacionLarga()).size
	}
	
	def ciudadesLargaDistanciaEnMes(mes: Integer, anio: Integer): Set[Localidad] = {
	    var listadoComunicaciones: ListBuffer[LlamadaLarga] = getLlamadasLargasMesAnio(mes, anio)
	    var listadoCiudades: ListBuffer[Localidad] = listadoComunicaciones.map(com => com.getLocDestino())
	    Set()++listadoCiudades
	}
	
	def diaMasComunicacionesEnMes(mes: Integer, anio: Integer) = {
	    var mapaDiaCantidad = new Array[Int](32)
	    getComunicacionesMesAnio(mes, anio).foreach(com => mapaDiaCantidad(com.getFecha().getDate()) += 1 )
	    
	    var diaConMasLlamadas = 1
	    for ( i <- 0 to 31) {
            if(mapaDiaCantidad(i) > mapaDiaCantidad(diaConMasLlamadas)){
              diaConMasLlamadas = i
            }
        }
	    diaConMasLlamadas
	}  
	
	
  
}